package rta.datos.conexion
{
	import flash.data.SQLConnection;
	import flash.data.SQLResult;
	import flash.data.SQLStatement;
	import flash.events.SQLErrorEvent;
	import flash.events.SQLEvent;
	
	import mx.collections.ArrayCollection;
	import mx.controls.Alert;
	
	import rta.datos.to.Perfil;

	public class PerfilDB
	{
		private var conn:SQLConnection;
		private var statement:SQLStatement;
		private var _callback:Function;
		
		private var _idPerfil:int;
		private var _idSecuencia:int;
		private var esImportacion:Boolean = false;
		
		public function PerfilDB(conn:SQLConnection)
		{
			this.conn = conn;
			statement = new SQLStatement();
			statement.itemClass = Perfil;
			statement.sqlConnection = conn;
			statement.addEventListener(SQLErrorEvent.ERROR, onSQLError);
		}
		
		public function set callback(value:Function):void
		{
			_callback = value;
		}
		
		private function onSQLError(event:SQLErrorEvent):void{
			trace(event.text);
		}
		
		//-------------------------------------------------
		
		
		//--OBTENER PERFILES-----------
		public function obtenerPerfiles():void{					
			statement.text = "SELECT id_perfil id, " +
							 "rut run, " +
							 "nombre nombres, " +
							 "ap_paterno apellidoPaterno, " +
							 "ap_materno apellidoMaterno, " +
							 "sexo sexo, " +
							 "ruta_imagen rutaImagen " +
							 "FROM perfil";
			statement.addEventListener(SQLEvent.RESULT, resultObtenerPerfiles);
			statement.execute();
		}
		
		private function resultObtenerPerfiles(event:SQLEvent):void{
			statement.removeEventListener(SQLEvent.RESULT, resultObtenerPerfiles);
			var result:SQLResult = statement.getResult();
			if (result != null && this._callback != null) {  
				this._callback(new ArrayCollection(result.data));
			}
		}
		//-------------------------------------
		
		
		//--GUARDAR PERFIL---------------------
		public function guardarPerfil(perfil:Perfil, importacion:Boolean=false):void{
			this.esImportacion = importacion;
			
			statement.text = "INSERT INTO perfil(rut, nombre, ap_paterno, ap_materno, sexo, ruta_imagen) " +
							 "VALUES ('" +
							 perfil.run +
							 "', '" +
							 perfil.nombres +
							 "', '" +
							 perfil.apellidoPaterno +
							 "', '" +
							 perfil.apellidoMaterno +
							 "', '" +
							 perfil.sexo +
							 "', '" +
							 perfil.rutaImagen +
							 "')";
			statement.addEventListener(SQLEvent.RESULT, resultGuardarPerfil);
			statement.execute();
		}
		
		private function resultGuardarPerfil(event:SQLEvent):void{
			statement.removeEventListener(SQLEvent.RESULT, resultGuardarPerfil);
			
			statement.text = "SELECT MAX(id_perfil) id FROM perfil";
			statement.addEventListener(SQLEvent.RESULT, resultObtenerId);
			statement.execute();
		}
		
		private function resultObtenerId(event:SQLEvent):void{
			statement.removeEventListener(SQLEvent.RESULT, resultObtenerId);
			
			var result:SQLResult = statement.getResult();
			if (result != null && result.data && result.data.length > 0) {  
				var perfil:Perfil = result.data[0] as Perfil;
				
				this._idPerfil = perfil.id;
				
				var secuenciaDB:SecuenciaDB = new SecuenciaDB(this.conn);
				secuenciaDB.callback = onCrearSecuencia;
				secuenciaDB.crearSecuencia(perfil.id, esImportacion);
			}
		}
		
		private function onCrearSecuencia(idSecuencia:int=-1):void{
			this._idSecuencia = idSecuencia;
			
			if (this._callback != null) {  	
				this._callback();
			}
		}
		//-------------------------------------
		
		
		//--EDITAR PERFIL---------------------
		public function editarPerfil(perfil:Perfil):void{
			statement.text = "UPDATE perfil SET " +
				"rut = '" +
				perfil.run +
				"', nombre = '" +
				perfil.nombres +
				"', ap_paterno = '" +
				perfil.apellidoPaterno +
				"', ap_materno = '" +
				perfil.apellidoMaterno +
				"', sexo = '" +
				perfil.sexo +
				"', ruta_imagen = '" +
				perfil.rutaImagen +
				"' " +
				"WHERE id_perfil = " +
				perfil.id;
			statement.addEventListener(SQLEvent.RESULT, resultEditarPerfil);
			statement.execute();
		}
		
		private function resultEditarPerfil(event:SQLEvent):void{
			statement.removeEventListener(SQLEvent.RESULT, resultEditarPerfil);
			if (this._callback != null) {  
				this._callback();
			}
		}
		//-------------------------------------
		
		//--ELIMINAR PERFIL--------------------
		public function eliminarPerfil(idPerfil:int):void{
			statement.text = "DELETE FROM perfil WHERE id_perfil = " + idPerfil;
			statement.addEventListener(SQLEvent.RESULT, resultEliminarPerfil);
			statement.execute();
		}
		
		private function resultEliminarPerfil(event:SQLEvent):void{
			statement.removeEventListener(SQLEvent.RESULT, resultEliminarPerfil);
			if (this._callback != null) {  
				this._callback();
			}
		}

		public function get idPerfil():int
		{
			return _idPerfil;
		}

		public function get idSecuencia():int
		{
			return _idSecuencia;
		}


		//-------------------------------------
	}
}